/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2022-09-16     chn13935838605       the first version
 */
#ifndef APPLICATIONS_MOTOR_MOTOR_H_
#define APPLICATIONS_MOTOR_MOTOR_H_
#include "System.h"


#define PWM_PERIOD_COUNT     (3599)


#define PWM_MAX_PERIOD_COUNT              (PWM_PERIOD_COUNT - 10)



/* 方向 */
typedef enum
{
  MOTOR_F = 0,
  MOTOR_B,
}motor_dir_t;

typedef enum
{
  MOTOR3 = 0,
  MOTOR4,
  MOTOR5,
  MOTOR8,
}motor_t;



#if 1
/* CUBEMX SET_COMPARE */
#define SET_MOTOR3_COMPAER(ChannelPulse)     __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_4,ChannelPulse)
#define SET_MOTOR4_COMPAER(ChannelPulse)     __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,ChannelPulse)
#define SET_MOTOR5_COMPAER(ChannelPulse)     __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,ChannelPulse)
#define SET_MOTOR8_COMPAER(ChannelPulse)     __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_3,ChannelPulse)

#define MOTOR3_ENABLE()      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4)
#define MOTOR4_ENABLE()      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1)
#define MOTOR5_ENABLE()      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2)
#define MOTOR8_ENABLE()      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3)

#define MOTOR3_DISABLE()     HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1)
#define MOTOR4_DISABLE()     HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_2)
#define MOTOR5_DISABLE()     HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_3)
#define MOTOR8_DISABLE()     HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_4)

/* 方向GPIO */
#define MOTOR3_IN1_SET         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET)
#define MOTOR3_IN1_RESET       HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET)
#define MOTOR3_IN2_SET         HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET)
#define MOTOR3_IN2_RESET       HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET)

#define MOTOR4_IN1_SET         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_SET)
#define MOTOR4_IN1_RESET       HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET)
#define MOTOR4_IN2_SET         HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0, GPIO_PIN_SET)
#define MOTOR4_IN2_RESET       HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0, GPIO_PIN_RESET)

#define MOTOR5_IN1_SET         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_SET)
#define MOTOR5_IN1_RESET       HAL_GPIO_WritePin(GPIOD, GPIO_PIN_1, GPIO_PIN_RESET)
#define MOTOR5_IN2_SET         HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_SET)
#define MOTOR5_IN2_RESET       HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_RESET)

#define MOTOR8_IN1_SET         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET)
#define MOTOR8_IN1_RESET       HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET)
#define MOTOR8_IN2_SET         HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET)
#define MOTOR8_IN2_RESET       HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET);
#endif



extern void set_motor_enable(void);
extern void set_motor_disable(void);

extern void MotorOutput(int Motor3Pwm,int Motor4Pwm,int Motor5Pwm,int Motor8Pwm);


#endif /* APPLICATIONS_MOTOR_MOTOR_H_ */
